μ¬ν κ°λ₯νκ³ νμ₯ κ°λ₯νλ©° μ μΈκ³μ μΌλ‘ λ°°ν¬λλ λ¨Έμ λ¬λ λͺ¨λΈμ μν νμ΄μ¬ ML νμ΄νλΌμΈ λ° MLOps ꡬνμ λ§μ€ν°νμ¬ νμ κ³Ό μ΄μ ν¨μ¨μ±μ ν₯μμν€μΈμ.
νμ΄μ¬ λ¨Έμ λ¬λ νμ΄νλΌμΈ: κΈλ‘λ² μ±κ³΅μ μν MLOps ꡬν
λΉ λ₯΄κ² μ§ννλ μΈκ³΅μ§λ₯ νκ²½μμ μ κ΅ν λ¨Έμ λ¬λ(ML) λͺ¨λΈμ ꡬμΆνλ κ²μ μ ν¬μ μ λ°μ λΆκ³Όν©λλ€. μ§μ ν κ³Όμ μ΄μ μ€μ κ°μΉλ₯Ό μ°½μΆνλ ν΅μ¬μ μ΄λ¬ν λͺ¨λΈμ νλ‘λμ νκ²½μμ ν¨κ³Όμ μΌλ‘ λ°°ν¬, κ΄λ¦¬, μ μ§νλ λ° μμ΅λλ€. λ°λ‘ μ΄ μ§μ μμ MLOps(λ¨Έμ λ¬λ μ΄μ)κ° νμ λΆκ°κ²°ν΄μ§λ©°, νΉν μ μΈκ³ μλ§μ λ°μ΄ν° κ³Όνμ λ° ML μμ§λμ΄λ€μ΄ μ νν μΈμ΄μΈ νμ΄μ¬μΌλ‘ μμ ν λ λμ± κ·Έλ μ΅λλ€.
μ΄ ν¬κ΄μ μΈ κ°μ΄λμμλ νμ΄μ¬ ML νμ΄νλΌμΈμ 볡μ‘ν μΈκ³μ MLOps μμΉμ΄ μ΄λ»κ² μ€νμ μΈ μ€ν¬λ¦½νΈλ₯Ό κ²¬κ³ νκ³ νμ₯ κ°λ₯νλ©° μ μΈκ³μ μΌλ‘ λ°°ν¬ κ°λ₯ν μμ€ν μΌλ‘ λ³νν μ μλμ§ μμΈν μμλ΄ λλ€. λ€μν μ°μ κ³Ό μ§μμ κ±ΈμΉ μ‘°μ§μ΄ ML μ΄λμ ν°λΈμμ μ΄μ μ°μμ±μ λ¬μ±ν μ μλλ‘ νλ ν΅μ¬ κ΅¬μ± μμ, μ€μ ꡬν λ° λͺ¨λ² μ¬λ‘λ₯Ό νꡬν κ²μ λλ€.
MLOpsκ° νμ΄μ¬ ML νμ΄νλΌμΈμ μ€μν μ΄μ
λ§μ μ‘°μ§μ΄ λ°μ΄ν° κ³Όνμλ€μ΄ μ£ΌνΌν° λ ΈνΈλΆμμ λͺ¨λΈμ ꡬμΆνλ κ²μΌλ‘ ML μ¬μ μ μμνλ©°, μ΄λ μ’ μ’ νλ‘λμ μΌλ‘ μ ννκΈ° μ΄λ €μ΄ "λͺ¨λΈ νλ‘ν νμ "μΌλ‘ μ΄μ΄μ§λλ€. MLOpsλ λ°λ‘ μ΄ κ²©μ°¨λ₯Ό ν΄μνλ κ²μ λͺ©νλ‘ ν©λλ€. μλ§μ λΌμ΄λΈλ¬λ¦¬μ 볡μ‘ν λ°μ΄ν° λ³νμ ν¬ν¨νλ νμ΄μ¬ κΈ°λ° MLμ κ²½μ°, MLOpsλ λ€μκ³Ό κ°μ ꡬ쑰νλ μ κ·Ό λ°©μμ μ 곡ν©λλ€:
- μ¬νμ± ν₯μ: μ΄λ€ λͺ¨λΈμ΄λ μ¬νλ ¨νμ¬ λμΌν(λλ κ±°μ λμΌν) κ²°κ³Όλ₯Ό μμ±ν μ μλλ‘ λ³΄μ₯νλ©°, μ΄λ κ°μ¬, λλ²κΉ λ° μ μΈκ³ κ·μ μ€μμ νμμ μΈ μꡬ μ¬νμ λλ€.
- νμ₯μ± μ¦λ: μλ‘μ΄ μμ₯μΌλ‘ νμ₯νλ λΉμ¦λμ€μ νμμ μΈ, μλΉν μν€ν μ² λ³κ²½ μμ΄ μ¦κ°νλ λ°μ΄ν° μκ³Ό μ¬μ©μ μμ²μ μ²λ¦¬ν μ μλ νμ΄νλΌμΈμ μ€κ³ν©λλ€.
- λͺ¨λν°λ§ λ° κ΄μ°° κ°λ₯μ± κ°μ : λͺ¨λΈ μ±λ₯, λ°μ΄ν° λ리ννΈ, μμ€ν μνλ₯Ό μ€μκ°μΌλ‘ μ§μμ μΌλ‘ μΆμ νμ¬ λ°°ν¬ μμΉμ κ΄κ³μμ΄ μ μ μ μΈ κ°μ μ κ°λ₯νκ² ν©λλ€.
- λ°°ν¬ κ°μν: νλ ¨λ λͺ¨λΈμ κ°λ° νκ²½μμ λ€μν νλ‘λμ νκ²½μΌλ‘, μ¦ ν μ§μμ μ¨νλ λ―Έμ€ μλ²λ μ¬λ¬ λλ₯μ λΆμ°λ ν΄λΌμ°λ μΈμ€ν΄μ€λ κ΄κ³μμ΄ μλμΌλ‘ λ°°ν¬νλ νλ‘μΈμ€λ₯Ό μλνν©λλ€.
- ν¨κ³Όμ μΈ λ²μ κ΄λ¦¬ νμ±ν: μ½λ, λ°μ΄ν°, λͺ¨λΈ λ° νκ²½μ λ²μ μ κ΄λ¦¬νμ¬ μνν λ‘€λ°±κ³Ό λΆμ°λ ν κ°μ λ³κ²½ μ¬νμ μ ννκ² μΆμ ν μ μλλ‘ λ³΄μ₯ν©λλ€.
- νμ μ΄μ§: λ°μ΄ν° κ³Όνμ, ML μμ§λμ΄, μννΈμ¨μ΄ κ°λ°μ, μ΄μν κ°μ μ§λ¦¬μ λΆλ¦¬λ λ¬Ένμ λ°°κ²½μ κ΄κ³μμ΄ μνν νμν¬λ₯Ό μ΄μ§ν©λλ€.
MLOpsκ° μμΌλ©΄ νμ΄μ¬ ML νλ‘μ νΈλ μ’ μ’ μλ νλ‘μΈμ€, μΌκ΄μ± μλ νκ²½, νμ€νλ κ΄νμ λΆμ¬λΌλ ννμ "κΈ°μ λΆμ±"μ μ§λ©΄νκ² λμ΄, μ μΈκ³μ μΌλ‘ μ§μμ μΈ λΉμ¦λμ€ κ°μΉλ₯Ό μ 곡νλ λ° λ°©ν΄λ₯Ό λ°μ΅λλ€.
MLOps κΈ°λ° νμ΄μ¬ ML νμ΄νλΌμΈμ ν΅μ¬ κ΅¬μ± μμ
μλν¬μλ MLOps νμ΄νλΌμΈμ μ¬λ¬ μνΈ μ°κ²°λ λ¨κ³λ‘ ꡬμ±λ μ κ΅ν μνκ³μ΄λ©°, κ° λ¨κ³λ ML λΌμ΄νμ¬μ΄ν΄μ νΉμ μΈ‘λ©΄μ μλννκ³ μ΅μ ννλλ‘ μ€κ³λμμ΅λλ€. λ€μμ μ΄λ¬ν μ€μν κ΅¬μ± μμμ λν μ¬μΈ΅ λΆμμ λλ€:
λ°μ΄ν° μμ§ λ° κ²μ¦
λͺ¨λ κ²¬κ³ ν ML νμ΄νλΌμΈμ κΈ°λ°μ κΉ¨λνκ³ μ λ’°ν μ μλ λ°μ΄ν°μ λλ€. μ΄ λ¨κ³λ λ€μν μμ€μμ λ°μ΄ν°λ₯Ό μμ§νκ³ ML μν¬νλ‘μ°μ λ€μ΄κ°κΈ° μ μ λ°μ΄ν°μ νμ§κ³Ό μΌκ΄μ±μ 보μ₯νλ λ° μ€μ μ λ‘λλ€.
- μμ€: λ°μ΄ν°λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€(PostgreSQL, MySQL), NoSQL λ°μ΄ν°λ² μ΄μ€(MongoDB, Cassandra), ν΄λΌμ°λ μ€ν 리μ§(AWS S3, Azure Blob Storage, Google Cloud Storage), λ°μ΄ν° μ¨μ΄νμ°μ€(Snowflake, Google BigQuery), μ€νΈλ¦¬λ° νλ«νΌ(Apache Kafka) λλ μΈλΆ APIμ κ°μ λ€μν μμ€ν μμ λΉλ‘―λ μ μμ΅λλ€. κΈλ‘λ² κ΄μ μμλ μ’ μ’ λ€λ₯Έ μ§μμμ μμ±λ λ°μ΄ν°λ₯Ό λ€λ£¨μ΄μΌ νλ©°, μ΄λ μ€ν€λ§ λ° κ·μ μ€μ μꡬ μ¬νμ΄ λ€λ₯Ό μ μμμ μλ―Έν©λλ€.
- νμ΄μ¬ λꡬ: Pandas λ° Dask(λ©λͺ¨λ¦¬λ³΄λ€ ν° λ°μ΄ν°μ μ©)μ κ°μ λΌμ΄λΈλ¬λ¦¬λ μ΄κΈ° λ°μ΄ν° λ‘λ© λ° μ‘°μμ μμ£Ό μ¬μ©λ©λλ€. λΆμ° μ²λ¦¬μ κ²½μ° PySpark(Apache Sparkμ ν¨κ»)λ ν΄λ¬μ€ν° μ λ°μ κ±Έμ³ ννλ°μ΄νΈ κ·λͺ¨μ λ°μ΄ν°λ₯Ό μ²λ¦¬ν μ μλ μΈκΈ° μλ μ νμ λλ€.
- λ°μ΄ν° κ²μ¦: "μ°λ κΈ°κ° λ€μ΄κ°λ©΄ μ°λ κΈ°κ° λμ¨λ€"λ κ²μ λ°©μ§νλ λ° λ§€μ° μ€μν©λλ€. Great Expectations λλ Pydanticκ³Ό κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ κΈ°λμΉ(μ: μ΄ μ€ν€λ§, κ° λ²μ, κ³ μ μ± μ μ½ μ‘°κ±΄)λ₯Ό μ μνκ³ λ€μ΄μ€λ λ°μ΄ν°λ₯Ό μλμΌλ‘ κ²μ¦ν μ μμ΅λλ€. μ΄λ νλ ¨ λ° μΆλ‘ μ μ¬μ©λλ λ°μ΄ν°κ° μ μλ νμ§ νμ€μ μ€μνλλ‘ λ³΄μ₯νλ©°, λͺ¨λΈ μ±λ₯μ μ μ§νκ³ λ°μ΄ν° λ리ννΈμ κ°μ λ¬Έμ λ₯Ό λ°©μ§νλ λ° μ€μν λ¨κ³μ λλ€.
- μ£Όμ κ³ λ € μ¬ν: λ°μ΄ν° νλΌμ΄λ²μ κ·μ (μ: μ λ½μ GDPR, μΊλ¦¬ν¬λμμ CCPA, λΈλΌμ§μ LGPD, λ¨μν리카μ POPIA, μ±κ°ν¬λ₯΄μ PDPA)μ λ°μ΄ν° μ²λ¦¬ λ° μ΅λͺ ν μ λ΅μ ν° μν₯μ λ―ΈμΉ©λλ€. λ°μ΄ν° μ£ΌκΆ λ° κ±°μ£Ό κ·μ μ λ°λΌ λ°μ΄ν°κ° μ μ₯λκ³ μ²λ¦¬λ μ μλ μμΉκ° κ²°μ λ μ μμΌλ―λ‘ κΈλ‘λ² λ°°ν¬λ₯Ό μν μ μ€ν μν€ν μ² μ€κ³κ° νμν©λλ€.
νΌμ² μμ§λμ΄λ§
μμ λ°μ΄ν°κ° ML λͺ¨λΈμ ν¨κ³Όμ μΈ νΌμ²λ‘ μ§μ λ³νλλ κ²½μ°λ λλ λλ€. μ΄ λ¨κ³λ μμ λ°μ΄ν°λ₯Ό ML μκ³ λ¦¬μ¦μ΄ μ΄ν΄νκ³ νμ΅ν μ μλ νμμΌλ‘ λ³ννλ κ³Όμ μ ν¬ν¨ν©λλ€.
- λ³ν: μμΉ μ€μΌμΌλ§(Scikit-learnμ MinMaxScaler, StandardScaler), λ²μ£Όν λ³μ μ-ν« μΈμ½λ©, λ€ν νΌμ² μμ±, μκ³μ΄ λ°μ΄ν° μ§κ³ λλ NLP κΈ°μ μ μ¬μ©ν ν μ€νΈ νΌμ² μΆμΆκ³Ό κ°μ μμ μ΄ ν¬ν¨λ μ μμ΅λλ€.
- νΌμ² μ ν/μΆμΆ: λͺ¨λΈ μ±λ₯μ κ°μ νκ³ μ°¨μμ μ€μ΄κΈ° μν΄ κ°μ₯ κ΄λ ¨μ± λμ νΌμ²λ₯Ό μλ³ν©λλ€.
- νμ΄μ¬ λꡬ: Scikit-learnμ λ§μ νΌμ² μμ§λμ΄λ§ μμ μ μ΄μμ λλ€. Featuretoolsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ νΉν κ΄κ³ν λλ μκ°μ λ°μ΄ν°μ λν νΌμ² μμ§λμ΄λ§ νλ‘μΈμ€μ μΌλΆλ₯Ό μλνν μ μμ΅λλ€.
- νΌμ² μ€ν μ΄: νΌμ²λ₯Ό κ΄λ¦¬, μ 곡 λ° λ²μ κ΄λ¦¬νκΈ° μν μ€μ μ§μ€μ μ μ₯μμ λλ€. Feastμ κ°μ λꡬλ₯Ό μ¬μ©νλ©΄ νΌμ²λ₯Ό ν λ² κ³μ°νμ¬ μ¬λ¬ λͺ¨λΈκ³Ό νμμ μ¬μ¬μ©ν μ μμΌλ―λ‘ νλ ¨κ³Ό μΆλ‘ κ°μ μΌκ΄μ±μ 보μ₯νκ³ μ€λ³΅ κ³μ°μ μ€μΌ μ μμ΅λλ€. μ΄λ λ§μ ML λͺ¨λΈκ³Ό μ§λ¦¬μ μΌλ‘ λΆμ°λ νμ΄ μλ λκ·λͺ¨ μ‘°μ§μ νΉν μ μ©ν©λλ€.
- λͺ¨λ² μ¬λ‘: νΌμ²μ κ·Έ λ³νμ λν λ²μ κ΄λ¦¬λ λͺ¨λΈκ³Ό μ½λλ₯Ό λ²μ κ΄λ¦¬νλ κ²λ§νΌ μ€μν©λλ€.
λͺ¨λΈ νλ ¨ λ° μ€ν
μ΄κ³³μ ML λͺ¨λΈμ΄ ꡬμΆ, μ΅μ ν λ° ν μ€νΈλλ κ³³μ λλ€. MLOpsλ μ΄ νλ‘μΈμ€κ° ꡬ쑰νλκ³ μΆμ κ°λ₯νλ©° μ¬ν κ°λ₯νλλ‘ λ³΄μ₯ν©λλ€.
- ML νλ μμν¬: νμ΄μ¬μ TensorFlow, PyTorch, Keras(λ₯λ¬λμ©), Scikit-learn(μ ν΅μ μΈ ML μκ³ λ¦¬μ¦μ©), XGBoost, LightGBM(κ·ΈλλμΈνΈ λΆμ€ν μ©)μ ν¬ν¨ν νλΆν ML λΌμ΄λΈλ¬λ¦¬ μνκ³λ₯Ό μ 곡ν©λλ€.
- μ€ν μΆμ : κ° μ€νμ λν λ©νΈλ¦, νμ΄νΌνλΌλ―Έν°, μ½λ λ²μ , λ°μ΄ν° λ²μ λ° νλ ¨λ λͺ¨λΈμ λ‘κΉ νλ λ° νμμ μ λλ€. MLflow, Weights & Biases (W&B) λλ Kubeflowμ κ΅¬μ± μμ(μ: Katib)μ κ°μ λꡬλ λ°μ΄ν° κ³Όνμκ° μ€νμ λΉκ΅νκ³ κ²°κ³Όλ₯Ό μ¬ννλ©° μ΅μμ λͺ¨λΈμ ν¨μ¨μ μΌλ‘ μ ννλ λ° λμμ μ€λλ€.
- νμ΄νΌνλΌλ―Έν° νλ: λͺ¨λΈ μ±λ₯μ μ΅λννκΈ° μν΄ μ΅μ μ νμ΄νΌνλΌλ―Έν° μ‘°ν©μ 체κ³μ μΌλ‘ κ²μν©λλ€. Optuna, Hyperoptμ κ°μ λΌμ΄λΈλ¬λ¦¬ λλ ν΄λΌμ°λ κΈ°λ° μλΉμ€(AWS SageMaker Hyperparameter Tuning, Azure ML hyperparameter tuning)λ μ΄ νλ‘μΈμ€λ₯Ό μλνν©λλ€.
- λΆμ° νλ ¨: λκ·λͺ¨ λ°μ΄ν°μ κ³Ό 볡μ‘ν λͺ¨λΈμ κ²½μ° νλ ¨μ μ¬λ¬ GPU λλ CPUμ λΆμ°ν΄μΌ ν μ μμ΅λλ€. Horovodμ κ°μ νλ μμν¬ λλ TensorFlow/PyTorch λ΄μ λΆμ° κΈ°λ₯μ΄ μ΄λ₯Ό κ°λ₯νκ² ν©λλ€.
- μ¬νμ±: κ³ μ λ λλ€ μλ, λ²μ κ΄λ¦¬λ λ°μ΄ν°, λͺ ννκ² μ μλ νκ²½(μ: Conda λλ Poetry νκ²½ νμΌ μ¬μ©)μ μ¬μ©νλ κ²μ μ¬νμ±μ λ§€μ° μ€μν©λλ€.
λͺ¨λΈ νκ° λ° κ²μ¦
νλ ¨ ν, λͺ¨λΈμ μ±λ₯ κΈ°μ€μ μΆ©μ‘±νκ³ λ°°ν¬μ μ ν©νμ§ νμΈνκΈ° μν΄ μ격νκ² νκ°λμ΄μΌ ν©λλ€.
- λ©νΈλ¦: λ¬Έμ μ νμ λ°λΌ μ νλ, μ λ°λ, μ¬νμ¨, F1-μ μ, AUC-ROC(λΆλ₯μ©), RMSE, MAE(νκ·μ©) λλ λνΉ, μμΈ‘ λ±μ μν λ μ λ¬Έμ μΈ λ©νΈλ¦μ΄ ν¬ν¨λ©λλ€. λΉμ¦λμ€ λͺ©νμ κ΄λ ¨λ λ©νΈλ¦μ μ ννκ³ , νΉν κΈλ‘λ² μ¬μ©μ κΈ°λ°μ λ€λ£° λ λΆκ· ν λ°μ΄ν°μ μμ λ°μν μ μλ μ μ¬μ νΈν₯μ κ³ λ €νλ κ²μ΄ μ€μν©λλ€.
- κ²μ¦ κΈ°λ²: κ΅μ°¨ κ²μ¦, νλμμ μΈνΈ, A/B ν μ€νΈ(νλ‘λμ μμ)κ° νμ€μ λλ€.
- λ² μ΄μ€λΌμΈ λͺ¨λΈ: λͺ¨λΈ μ±λ₯μ κ°λ¨ν λ² μ΄μ€λΌμΈ(μ: κ·μΉ κΈ°λ° μμ€ν λλ λ¨μ μμΈ‘κΈ°)κ³Ό λΉκ΅νμ¬ μ€μ κ°μΉλ₯Ό νμΈνλ κ²μ΄ νμμ μ λλ€.
- μ€λͺ κ°λ₯μ±(XAI): λͺ¨λΈμ΄ νΉμ μμΈ‘μ νλ μ΄μ λ₯Ό μ΄ν΄νλ κ²μ λλ²κΉ λΏλ§ μλλΌ κ·μ μ°μ μ΄λ λ€μν μΈκ΅¬μ μν₯μ λ―ΈμΉλ λ―Όκ°ν κ²°μ μ λ€λ£° λ κ·μ μ€μμ μ λ’°λ₯Ό μν΄ μ μ λ μ€μν΄μ§κ³ μμ΅λλ€. SHAP(SHapley Additive exPlanations) λ° LIME(Local Interpretable Model-agnostic Explanations)κ³Ό κ°μ λꡬλ κ·μ€ν ν΅μ°°λ ₯μ μ 곡ν©λλ€.
- 곡μ μ± λ©νΈλ¦: νΉν μ μΈκ³μ μΌλ‘ λ°°ν¬λλ λͺ¨λΈμ κ²½μ°, λ€μν μΈκ΅¬ ν΅κ³ κ·Έλ£Ήμ κ±Έμ³ λͺ¨λΈμ νΈν₯μ νκ°νλ κ²μ΄ μ€μν©λλ€. AI Fairness 360κ³Ό κ°μ λꡬ λ° νλ μμν¬λ μ μ¬μ νΈν₯μ νκ°νκ³ μννλ λ° λμμ΄ λ μ μμ΅λλ€.
λͺ¨λΈ λ²μ κ΄λ¦¬ λ° λ μ§μ€νΈλ¦¬
λͺ¨λΈμ μ΄μμλ μ°μΆλ¬Όμ λλ€. κ·Έ λ²μ μ κ΄λ¦¬νλ κ²μ μ± μμ±, κ°μ¬ κ°λ₯μ± λ° μ΄μ μμ λ²μ μΌλ‘ λ‘€λ°±ν μ μλ λ₯λ ₯μ λ§€μ° μ€μν©λλ€.
- λ²μ κ΄λ¦¬μ μ΄μ : νλ ¨λ λͺ¨λ λͺ¨λΈμ κ·Έκ²μ λ§λλ λ° μ¬μ©λ μ½λ, λ°μ΄ν°, νκ²½κ³Ό ν¨κ» λ²μ κ΄λ¦¬λμ΄μΌ ν©λλ€. μ΄λ νΉμ λͺ¨λΈ μν°ν©νΈκ° μ΄λ»κ² μμ±λμλμ§ λͺ ννκ² μΆμ νκ³ μ΄ν΄ν μ μκ² ν΄μ€λλ€.
- λͺ¨λΈ λ μ§μ€νΈλ¦¬: νλ ¨λ λͺ¨λΈμ μ μ₯, κ΄λ¦¬ λ° λͺ©λ‘ννλ μ€μ μ§μ€μ μμ€ν μ λλ€. μΌλ°μ μΌλ‘ λͺ¨λΈμ λν λ©νλ°μ΄ν°(μ: λ©νΈλ¦, νμ΄νΌνλΌλ―Έν°), λ²μ λ° λΌμ΄νμ¬μ΄ν΄ λ¨κ³(μ: μ€ν μ΄μ§, νλ‘λμ , μμΉ΄μ΄λΈ)λ₯Ό ν¬ν¨ν©λλ€.
- νμ΄μ¬ λꡬ: MLflow Model Registryλ μ΄λ₯Ό μν μ λͺ ν λꡬλ‘, MLflow λͺ¨λΈμ μ 체 λΌμ΄νμ¬μ΄ν΄μ κ΄λ¦¬νκΈ° μν μ€μ νλΈλ₯Ό μ 곡ν©λλ€. DVC(Data Version Control)λ λͺ¨λΈμ λ°μ΄ν° μν°ν©νΈλ‘ λ²μ κ΄λ¦¬νλ λ° μ¬μ©ν μ μμΌλ©°, νΉν λκ·λͺ¨ λͺ¨λΈμ μ μ©ν©λλ€. Git LFS(Large File Storage)λ Gitμ μ½λμ ν¨κ» λμ©λ λͺ¨λΈ νμΌμ μ μ₯νλ λ λ€λ₯Έ μ΅μ μ λλ€.
- μ€μμ±: μ΄ κ΅¬μ± μμλ μΌκ΄λ λ°°ν¬λ₯Ό κ°λ₯νκ² νκ³ , λ€μν λͺ¨λΈ λ²μ μ A/B ν μ€νΈλ₯Ό μ©μ΄νκ² νλ©°, νλ‘λμ μμ μ±λ₯ μ ν λλ λ¬Έμ κ° λ°μν κ²½μ° μ¬μ΄ λ‘€λ°±μ 보μ₯νκΈ° λλ¬Έμ MLOpsμ νμμ μ λλ€.
MLμ μν CI/CD (CI/CD/CT)
μ§μμ ν΅ν©(CI), μ§μμ μ λ¬(CD), μ§μμ νλ ¨(CT)μ MLOpsμ κΈ°λ₯μΌλ‘, DevOps κ΄νμ ML μν¬νλ‘μ°λ‘ νμ₯ν©λλ€.
- μ§μμ ν΅ν©(CI): μ½λ λ³κ²½ μ¬νμ μλμΌλ‘ λΉλνκ³ ν μ€νΈν©λλ€. MLμ κ²½μ°, μ΄λ λͺ¨λ μ½λ 컀λ°μ λν΄ μ λ ν μ€νΈ, ν΅ν© ν μ€νΈ, κ·Έλ¦¬κ³ μ μ¬μ μΌλ‘ λ°μ΄ν° κ²μ¦ ν μ€νΈλ₯Ό μ€ννλ κ²μ μλ―Έν©λλ€.
- μ§μμ μ λ¬(CD): κ²μ¦λ μ½λλ₯Ό λ€μν νκ²½μ μλμΌλ‘ 릴리μ€ν©λλ€. MLμμλ μλ‘μ΄ λͺ¨λΈμ μ€ν μ΄μ§ νκ²½μ λ°°ν¬νκ±°λ λ°°ν¬ κ°λ₯ν μν°ν©νΈ(μ: Docker μ΄λ―Έμ§)λ₯Ό μμ±νλ κ²μ μλ―Έν μ μμ΅λλ€.
- μ§μμ νλ ¨(CT): μλ‘μ΄ λ°μ΄ν°, μ€μΌμ€ λλ μ±λ₯ μ ν μ νΈμ λ°λΌ λͺ¨λΈμ΄ μλμΌλ‘ μ¬νλ ¨λκ³ μ¬κ²μ¦λλ MLOpsμ λ νΉν μΈ‘λ©΄μ λλ€. μ΄λ λͺ¨λΈμ΄ μκ°μ΄ μ§λλ κ΄λ ¨μ±κ³Ό μ νμ±μ μ μ§νλλ‘ λ³΄μ₯ν©λλ€.
- ν
μ€νΈ μ ν:
- μ λ ν μ€νΈ: κ°λ³ ν¨μ(μ: νΌμ² μμ§λμ΄λ§ λ¨κ³, λͺ¨λΈ μμΈ‘ λ‘μ§)λ₯Ό κ²μ¦ν©λλ€.
- ν΅ν© ν μ€νΈ: νμ΄νλΌμΈμ λ€λ₯Έ κ΅¬μ± μμ(μ: λ°μ΄ν° μμ§ + νΌμ² μμ§λμ΄λ§)κ° ν¨κ» μ¬λ°λ₯΄κ² μλνλμ§ νμΈν©λλ€.
- λ°μ΄ν° ν μ€νΈ: λ°μ΄ν° μ€ν€λ§, νμ§ λ° ν΅κ³μ μμ±μ κ²μ¦ν©λλ€.
- λͺ¨λΈ νμ§ ν μ€νΈ: μ μ© ν μ€νΈ μΈνΈμμ λͺ¨λΈ μ±λ₯μ νκ°νκ³ , λ² μ΄μ€λΌμΈ λλ 미리 μ μλ μκ³κ°κ³Ό λΉκ΅ν©λλ€.
- μΆλ‘ ν μ€νΈ: λ°°ν¬λ λͺ¨λΈ μλν¬μΈνΈκ° μμΈ‘μ μ¬λ°λ₯΄κ² κ·Έλ¦¬κ³ νμ© κ°λ₯ν μ§μ° μκ° λ΄μ λ°ννλμ§ νμΈν©λλ€.
- νμ΄μ¬ λꡬ: Jenkins, GitLab CI/CD, GitHub Actions, Azure DevOpsμ κ°μ CI/CD νλ«νΌ λλ AWS CodePipelineκ³Ό κ°μ ν΄λΌμ°λ λ€μ΄ν°λΈ μ΅μ μ νμ΄μ¬ νλ‘μ νΈμ μννκ² ν΅ν©λ©λλ€. Argo Workflows λλ Tektonκ³Ό κ°μ μ€μΌμ€νΈλ μ΄ν°λ MLμ μν 볡μ‘νκ³ μ»¨ν μ΄λνλ CI/CD νμ΄νλΌμΈμ κ΄λ¦¬ν μ μμ΅λλ€.
λͺ¨λΈ λ°°ν¬
νλ ¨λκ³ κ²μ¦λ λͺ¨λΈμ μμΈ‘μ μννκ³ μ¬μ©μμκ² μλΉμ€λ₯Ό μ 곡ν μ μλ νκ²½μ λ°°μΉνλ κ²μ λλ€.
- λ°°ν¬ λ°©λ²:
- λ°°μΉ μΆλ‘ : λͺ¨λΈμ΄ μ£ΌκΈ°μ μΌλ‘ λκ·λͺ¨ λ°μ΄ν°μ μ μ²λ¦¬νμ¬ μ€νλΌμΈμΌλ‘ μμΈ‘μ μμ±ν©λλ€(μ: μΌμΌ μ¬κΈ° νμ§ λ³΄κ³ μ, μκ° λ§μΌν μΈλΆν).
- μ€μκ° μΆλ‘ : λͺ¨λΈμ΄ API μλν¬μΈνΈλ₯Ό ν΅ν΄ κ°λ³ μμ²μ μ¦μ μλ΅ν©λλ€. μ΄λ μΌλ°μ μΌλ‘ λͺ¨λΈμ μΉ μλΉμ€(μ: FastAPI λλ Flask μ¬μ©)λ‘ λννκ³ μλ²μ λ°°ν¬νλ κ²μ ν¬ν¨ν©λλ€.
- μ£μ§ λ°°ν¬: μ μ§μ°, μ€νλΌμΈ μμΈ‘μ μν΄ λͺ¨λΈμ μ₯μΉ(μ: IoT μΌμ, ν΄λν°, μμ¨ μ£Όν μ°¨λ)μ μ§μ λ°°ν¬ν©λλ€. μ΄λ μ’ μ’ TensorFlow Lite λλ ONNX Runtimeκ³Ό κ°μ λꡬλ₯Ό μ¬μ©ν λͺ¨λΈ μ΅μ ν(μ: μμν, κ°μ§μΉκΈ°)λ₯Ό νμλ‘ ν©λλ€.
- 컨ν μ΄λν: Dockerλ λͺ¨λΈκ³Ό κ·Έ μ’ μμ±μ μ΄μ κ°λ₯νκ³ κ²©λ¦¬λ 컨ν μ΄λλ‘ ν¨ν€μ§νμ¬ λ€λ₯Έ νκ²½μμ μΌκ΄λ μ€νμ 보μ₯νκΈ° μν΄ κ±°μ 보νΈμ μΌλ‘ μ¬μ©λ©λλ€.
- μ€μΌμ€νΈλ μ΄μ : Kubernetesλ 컨ν μ΄λνλ μ ν리μΌμ΄μ μ μ€μΌμ€νΈλ μ΄μ νκΈ° μν μ¬μ€μμ νμ€μΌλ‘, νμ₯ κ°λ₯νκ³ νλ ₯μ μΈ λ°°ν¬λ₯Ό κ°λ₯νκ² ν©λλ€.
- ML μ μ© λ°°ν¬ λꡬ: Seldon Core λ° KFServing(νμ¬ Kubeflowμ μΌλΆ)κ³Ό κ°μ λꡬλ μΉ΄λ리 λ‘€μμ, A/B ν μ€νΈ λ° μλ μ€μΌμΌλ§μ ν¬ν¨νμ¬ Kubernetesμμ ML λͺ¨λΈμ λ°°ν¬νκΈ° μν κ³ κΈ κΈ°λ₯μ μ 곡ν©λλ€.
- ν΄λΌμ°λ ML νλ«νΌ: AWS SageMaker, Azure Machine Learning, Google Cloud AI Platformκ³Ό κ°μ κ΄λ¦¬ν μλΉμ€λ ν΅ν© λ°°ν¬ κΈ°λ₯μ ν¬ν¨ν μλν¬μλ MLOps κΈ°λ₯μ μ 곡νμ¬ λ§μ μΈνλΌ λ³΅μ‘μ±μ μΆμνν©λλ€. μ΄λ¬ν νλ«νΌμ μ¬λ¬ μ§μμ κ±Έμ³ νμ€νλ λ°°ν¬λ₯Ό μΆκ΅¬νλ κΈλ‘λ² νμ νΉν μ μ©ν©λλ€.
λͺ¨λΈ λͺ¨λν°λ§ λ° κ΄μ°° κ°λ₯μ±
λ°°ν¬λ λͺ¨λΈμ μ±λ₯μ λ¬Έμ λ₯Ό κ°μ§νκ³ μ§μμ μΌλ‘ κ°μΉλ₯Ό μ 곡νλμ§ νμΈνκΈ° μν΄ μ§μμ μΌλ‘ λͺ¨λν°λ§λμ΄μΌ ν©λλ€.
- λͺ¨λν°λ§ λμ:
- λͺ¨λΈ μ±λ₯: λΌμ΄λΈ λ°μ΄ν°μ λν λ©νΈλ¦(μ νλ, RMSE)μ μΆμ νκ³ λ² μ΄μ€λΌμΈ λλ μ¬νλ ¨ μκ³κ°κ³Ό λΉκ΅ν©λλ€.
- λ°μ΄ν° λ리ννΈ: μκ° κ²½κ³Όμ λ°λ₯Έ μ λ ₯ λ°μ΄ν° λΆν¬μ λ³νλ‘, λͺ¨λΈ μ±λ₯μ μ νμν¬ μ μμ΅λλ€.
- 컨μ λ리ννΈ: μ λ ₯ νΌμ²μ λμ λ³μ κ°μ κ΄κ³ λ³νλ‘, λͺ¨λΈμ΄ νμ΅ν ν¨ν΄μ μΈλͺ¨μκ² λ§λλλ€.
- μμΈ‘ λ리ννΈ: λͺ¨λΈ μμΈ‘ λΆν¬μ λ³ν.
- μμ€ν μν: μΆλ‘ μλΉμ€μ μ§μ° μκ°, μ²λ¦¬λ, μ€λ₯μ¨.
- λͺ¨λΈ νΈν₯: λͺ¨λΈμ μμΈ‘μ΄ νΉμ μΈκ΅¬ ν΅κ³ κ·Έλ£Ήμ λΆκ· νμ μΌλ‘ μν₯μ λ―ΈμΉλμ§ κ°μ§νκΈ° μν΄ κ³΅μ μ± λ©νΈλ¦μ μ§μμ μΌλ‘ λͺ¨λν°λ§νλ©°, μ΄λ μ€λ¦¬μ AIμ λ€μν μμ₯μμμ κ·μ μ€μμ λ§€μ° μ€μν©λλ€.
- νμ΄μ¬ λꡬ: Evidently AI λ° WhyLabsμ κ°μ λΌμ΄λΈλ¬λ¦¬λ λ°μ΄ν° λ° μ»¨μ λ리ννΈ, λͺ¨λΈ μ±λ₯ μ ν, λ°μ΄ν° νμ§ λ¬Έμ λ₯Ό κ°μ§νλ λ° νΉνλμ΄ μμ΅λλ€. Prometheus(λ©νΈλ¦ μμ§μ©) λ° Grafana(μκ°νμ©)μ κ°μ μ ν΅μ μΈ λͺ¨λν°λ§ μ€νμ μΈνλΌ λ° μλΉμ€ μμ€ λͺ¨λν°λ§μ μΌλ°μ μΌλ‘ μ¬μ©λ©λλ€.
- μλ¦Ό: μ΄μ λλ μ±λ₯ μ νκ° κ°μ§λμμ λ μλ μλ¦Ό(μ: μ΄λ©μΌ, Slack, PagerDutyλ₯Ό ν΅ν΄)μ μ€μ νλ κ²μ μ μ μ κ°μ μ λ§€μ° μ€μν©λλ€.
- νΌλλ°± 루ν: λͺ¨λν°λ§μ λͺ¨λΈ μ¬νλ ¨ κ²°μ μ μλ €μ£Όλ©°, μ΄λ MLOpsμ ν΅μ¬μΈ μ§μμ μΈ νΌλλ°± 루νλ₯Ό μμ±ν©λλ€.
μ€μΌμ€νΈλ μ΄μ λ° μν¬νλ‘μ° κ΄λ¦¬
ML νμ΄νλΌμΈμ λͺ¨λ μ΄μ§μ μΈ κ΅¬μ± μμλ₯Ό μμ§λ ₯ μκ³ μλνλ μν¬νλ‘μ°λ‘ μ°κ²°ν©λλ€.
- μ€μΌμ€νΈλ μ΄μ μ μ΄μ : ML νμ΄νλΌμΈμ μΌλ ¨μ μμ (λ°μ΄ν° μμ§, νΌμ² μμ§λμ΄λ§, νλ ¨, νκ°, λ°°ν¬)μ ν¬ν¨ν©λλ€. μ€μΌμ€νΈλ μ΄ν°λ μ΄λ¬ν μ’ μμ±μ μ μνκ³ , μμ μ μ€μΌμ€λ§νλ©°, μ¬μλλ₯Ό κ΄λ¦¬νκ³ , μ€νμ λͺ¨λν°λ§νμ¬ μμ μ μ΄κ³ μλνλ μ΄μμ 보μ₯ν©λλ€.
- λ°©ν₯μ± λΉμν κ·Έλν(DAGs): λλΆλΆμ μ€μΌμ€νΈλ μ΄ν°λ μν¬νλ‘μ°λ₯Ό DAGλ‘ νννλ©°, μ¬κΈ°μ λ Έλλ μμ μ΄κ³ μ£μ§λ μ’ μμ±μ λνλ λλ€.
- νμ΄μ¬ λꡬ:
- Apache Airflow: νλ‘κ·Έλλ° λ°©μμΌλ‘ μν¬νλ‘μ°λ₯Ό μμ±, μ€μΌμ€λ§ λ° λͺ¨λν°λ§νκΈ° μν΄ λ리 μ±νλ μ€ν μμ€ νλ«νΌμ λλ€. νμ΄μ¬ λ€μ΄ν°λΈ νΉμ± λλΆμ λ°μ΄ν° μμ§λμ΄μ ML μ€λ¬΄μλ€ μ¬μ΄μμ μΈκΈ°κ° λ§μ΅λλ€.
- Kubeflow Pipelines: Kubeflow νλ‘μ νΈμ μΌλΆλ‘, Kubernetesμμ ML μν¬νλ‘μ°λ₯Ό μν΄ νΉλ³ν μ€κ³λμμ΅λλ€. μ΄μ κ°λ₯νκ³ νμ₯ κ°λ₯ν ML νμ΄νλΌμΈμ ꡬμΆνκ³ λ°°ν¬ν μ μμ΅λλ€.
- Prefect: μ μ°μ±κ³Ό λ΄κ²°ν¨μ±μ κ°μ‘°νλ νλμ μΈ νμ΄μ¬ λ€μ΄ν°λΈ μν¬νλ‘μ° κ΄λ¦¬ μμ€ν μΌλ‘, νΉν 볡μ‘ν λ°μ΄ν° νλ‘μ°μ μ ν©ν©λλ€.
- Dagster: ν μ€νΈμ κ΄μ°° κ°λ₯μ±μ μ€μ μ λ λ°μ΄ν° μ ν리μΌμ΄μ ꡬμΆμ μν λ λ€λ₯Έ νμ΄μ¬ λ€μ΄ν°λΈ μμ€ν μ λλ€.
- μ΄μ : μ 체 ML λΌμ΄νμ¬μ΄ν΄μ μλν, μ€λ₯ μ²λ¦¬, νμ₯μ± λ° ν¬λͺ μ±μ΄ κ²¬κ³ ν μ€μΌμ€νΈλ μ΄μ μ ν΅ν΄ ν¬κ² ν₯μλ©λλ€.
νμ΄μ¬ ML νμ΄νλΌμΈ ꡬμΆ: μ€μ©μ μΈ μ κ·Όλ²
MLOps κΈ°λ° νμ΄νλΌμΈμ ꡬννλ κ²μ λ°λ³΅μ μΈ νλ‘μΈμ€μ λλ€. μΌλ°μ μΈ λ¨κ³λ³ μ κ·Όλ²μ λ€μκ³Ό κ°μ΅λλ€:
1λ¨κ³: μ€ν λ° λ‘컬 κ°λ°
- μ΄μ : λΉ λ₯Έ λ°λ³΅, κ°λ μ¦λͺ .
- νλ: λ‘컬 νκ²½μμμ λ°μ΄ν° νμ, λͺ¨λΈ νλ‘ν νμ΄ν, νΌμ² μμ§λμ΄λ§ νμ, νμ΄νΌνλΌλ―Έν° νλ.
- λꡬ: μ£ΌνΌν° λ ΈνΈλΆ, λ‘컬 νμ΄μ¬ νκ²½, Pandas, Scikit-learn, κΈ°λ³Έμ μΈ μ€ν μΆμ μ μν MLflow λλ W&Bμ μ΄κΈ° μ¬μ©.
- κ²°κ³Ό: μ μ¬μ κ°μΉλ₯Ό 보μ¬μ£Όλ μλνλ λͺ¨λΈ νλ‘ν νμ , μ£Όμ λ°κ²¬ μ¬ν λ° νΌμ² μμ§λμ΄λ§ λ‘μ§.
2λ¨κ³: 컨ν μ΄λν λ° λ²μ κ΄λ¦¬
- μ΄μ : μ¬νμ±, νμ , νλ‘λμ μ€λΉ.
- νλ: Dockerλ₯Ό μ¬μ©νμ¬ λͺ¨λΈ νλ ¨ λ° μΆλ‘ μ½λλ₯Ό 컨ν
μ΄λνν©λλ€. λͺ¨λ μ½λ(Git), λ°μ΄ν°(DVC), λͺ¨λΈ μν°ν©νΈ(MLflow Model Registry, DVC λλ Git LFS)λ₯Ό λ²μ κ΄λ¦¬ν©λλ€. λͺ
μμ μΈ νμ΄μ¬ νκ²½(μ:
requirements.txt,environment.yml,pyproject.toml)μ μ μν©λλ€. - λꡬ: Git, Docker, DVC, MLflow/W&B.
- κ²°κ³Ό: μ¬ν κ°λ₯ν λͺ¨λΈ νλ ¨ λ° μΆλ‘ νκ²½, λ²μ κ΄λ¦¬λ μν°ν©νΈ, λͺ νν λ³κ²½ μ΄λ ₯.
3λ¨κ³: μλνλ μν¬νλ‘μ° λ° μ€μΌμ€νΈλ μ΄μ
- μ΄μ : μλν, μ λ’°μ±, νμ₯μ±.
- νλ: μ€ν μ€ν¬λ¦½νΈλ₯Ό λͺ¨λνλκ³ ν μ€νΈ κ°λ₯ν κ΅¬μ± μμλ‘ λ³νν©λλ€. Apache Airflow λλ Kubeflow Pipelinesμ κ°μ μ€μΌμ€νΈλ μ΄ν°λ₯Ό μ¬μ©νμ¬ μλν¬μλ νμ΄νλΌμΈμ μ μν©λλ€. μ½λ λ³κ²½, λ°μ΄ν° κ²μ¦ λ° λͺ¨λΈ μ¬νλ ¨μ μν CI/CDλ₯Ό ꡬνν©λλ€. λ² μ΄μ€λΌμΈμ λν μλ λͺ¨λΈ νκ°λ₯Ό μ€μ ν©λλ€.
- λꡬ: Apache Airflow, Kubeflow Pipelines, Prefect, GitHub Actions/GitLab CI/CD, Great Expectations.
- κ²°κ³Ό: λͺ¨λΈμ μ¬νλ ¨νκ³ , λ°μ΄ν° κ²μ¦μ μννλ©°, μ±κ³΅μ μΈ κ²μ¦ μ λ°°ν¬λ₯Ό νΈλ¦¬κ±°ν μ μλ μλνλκ³ μ€μΌμ€λ ML νμ΄νλΌμΈ.
4λ¨κ³: λ°°ν¬ λ° λͺ¨λν°λ§
- μ΄μ : μμΈ‘ μ 곡, μ§μμ μΈ μ±λ₯ κ΄λ¦¬, μ΄μ μμ μ±.
- νλ: λͺ¨λΈμ μλΉμ€λ‘ λ°°ν¬ν©λλ€(μ: FastAPI + Docker + Kubernetes λλ ν΄λΌμ°λ ML μλΉμ€ μ¬μ©). Prometheus, Grafana, Evidently AIμ κ°μ λꡬλ₯Ό μ¬μ©νμ¬ λͺ¨λΈ μ±λ₯, λ°μ΄ν° λ리ννΈ λ° μΈνλΌ μνμ λν ν¬κ΄μ μΈ λͺ¨λν°λ§μ ꡬνν©λλ€. μλ¦Ό λ©μ»€λμ¦μ ꡬμΆν©λλ€.
- λꡬ: FastAPI/Flask, Docker, Kubernetes/ν΄λΌμ°λ ML νλ«νΌ, Seldon Core/KFServing, Prometheus, Grafana, Evidently AI/WhyLabs.
- κ²°κ³Ό: μ μ μ μΈ λ¬Έμ κ°μ§ λ° μ¬νλ ¨ νΈλ¦¬κ±° λ©μ»€λμ¦μ κ°μΆ, νλ‘λμ νκ²½μμ μμ ν μ΄μλκ³ μ§μμ μΌλ‘ λͺ¨λν°λ§λλ ML λͺ¨λΈ.
MLOpsλ₯Ό μν νμ΄μ¬ λΌμ΄λΈλ¬λ¦¬ λ° λꡬ
νμ΄μ¬ μνκ³λ MLOps ꡬνμ μ©μ΄νκ² νλ λΉν λ° μλ λ€μν λꡬλ₯Ό μ 곡ν©λλ€. μ£Όμ μμμ λ€λ£¨λ μ λ³λ λͺ©λ‘μ λ€μκ³Ό κ°μ΅λλ€:
- λ°μ΄ν° μ²λ¦¬ λ° νΌμ² μμ§λμ΄λ§:
- Pandas, NumPy: λ°μ΄ν° μ‘°μ λ° μμΉ μ°μ°μ κΈ°λ³Έ.
- Dask: νμ₯ κ°λ₯ν, λ©λͺ¨λ¦¬ μΈ λ°μ΄ν° μ²λ¦¬μ©.
- PySpark: λΆμ° λ°μ΄ν° μ²λ¦¬λ₯Ό κ°λ₯νκ² νλ Apache Sparkμ© νμ΄μ¬ API.
- Scikit-learn: κ³ μ μ μΈ ML μκ³ λ¦¬μ¦ λ° νΌμ² λ³νμ μν νλΆν λΌμ΄λΈλ¬λ¦¬.
- Great Expectations: λ°μ΄ν° κ²μ¦ λ° νμ§ κ²μ¬μ©.
- Feast: ML νΌμ²λ₯Ό κ΄λ¦¬νκ³ μ 곡νκΈ° μν μ€ν μμ€ νΌμ² μ€ν μ΄.
- ML νλ μμν¬:
- TensorFlow, Keras: ꡬκΈμ΄ μ§μνλ μ€ν μμ€ ML νλ«νΌ, νΉν λ₯λ¬λμ κ°ν¨.
- PyTorch: νμ΄μ€λΆμ΄ μ§μνλ μ€ν μμ€ ML νλ μμν¬, μ°κ΅¬ λ° μ μ°μ±μΌλ‘ μΈκΈ°.
- XGBoost, LightGBM, CatBoost: ν μ΄λΈ νμ λ°μ΄ν°λ₯Ό μν κ³ λλ‘ μ΅μ νλ κ·ΈλλμΈνΈ λΆμ€ν λΌμ΄λΈλ¬λ¦¬.
- μ€ν μΆμ λ° λͺ¨λΈ λ²μ κ΄λ¦¬/λ μ§μ€νΈλ¦¬:
- MLflow: μΆμ , νλ‘μ νΈ, λͺ¨λΈ, λ μ§μ€νΈλ¦¬λ₯Ό ν¬ν¨νμ¬ ML λΌμ΄νμ¬μ΄ν΄μ κ΄λ¦¬νκΈ° μν ν¬κ΄μ μΈ νλ«νΌ.
- Weights & Biases (W&B): μ€ν μΆμ , μκ°ν λ° νμ μ μν κ°λ ₯ν λꡬ.
- DVC (Data Version Control): μ½λμ ν¨κ» λ°μ΄ν° λ° λͺ¨λΈ μν°ν©νΈλ₯Ό λ²μ κ΄λ¦¬νκΈ° μν¨.
- Pachyderm: λ°μ΄ν° λ²μ κ΄λ¦¬ λ° λ°μ΄ν° μ€μ¬ νμ΄νλΌμΈ, μ’ μ’ Kubernetesμ ν¨κ» μ¬μ©λ¨.
- λ°°ν¬:
- FastAPI, Flask: κ³ μ±λ₯ μΆλ‘ APIλ₯Ό ꡬμΆνκΈ° μν νμ΄μ¬ μΉ νλ μμν¬.
- Docker: ML λͺ¨λΈκ³Ό κ·Έ μ’ μμ±μ 컨ν μ΄λννκΈ° μν¨.
- Kubernetes: λκ·λͺ¨λ‘ 컨ν μ΄λνλ μ ν리μΌμ΄μ μ μ€μΌμ€νΈλ μ΄μ νκΈ° μν¨.
- Seldon Core, KFServing (KServe): Kubernetesμμ ML μ μ© λ°°ν¬ νλ«νΌμΌλ‘, μΉ΄λ리 λ‘€μμ λ° μλ μ€μΌμΌλ§κ³Ό κ°μ κ³ κΈ κΈ°λ₯ μ 곡.
- ONNX Runtime, TensorFlow Lite: μ£μ§ μ₯μΉμ λͺ¨λΈμ μ΅μ ννκ³ λ°°ν¬νκ±°λ λ λΉ λ₯Έ μΆλ‘ μ μν¨.
- μ€μΌμ€νΈλ μ΄μ
:
- Apache Airflow: νλ‘κ·Έλλ° λ°©μμ μν¬νλ‘μ° μ€μΌμ€νΈλ μ΄μ νλ«νΌ.
- Kubeflow Pipelines: λ€μ΄ν°λΈ Kubernetes ML μν¬νλ‘μ° μ€μΌμ€νΈλ μ΄μ .
- Prefect: νμ΄μ¬μ μ€μ μ λ νλμ μΈ λ°μ΄ν° νλ‘μ° μλν νλ«νΌ.
- Dagster: κ°λ°μ κ²½νκ³Ό κ΄μ°° κ°λ₯μ±μ μ€μ μ λ MLOpsμ© λ°μ΄ν° μ€μΌμ€νΈλ μ΄ν°.
- λͺ¨λν°λ§ λ° κ΄μ°° κ°λ₯μ±:
- Evidently AI: λ°μ΄ν° λ° λͺ¨λΈ λͺ¨λν°λ§, λ리ννΈ κ°μ§, λ°μ΄ν° νμ§μ μν μ€ν μμ€ λΌμ΄λΈλ¬λ¦¬.
- WhyLabs (whylogs): λ°μ΄ν° λ° ML νμ΄νλΌμΈμ μν μ€ν μμ€ λ°μ΄ν° λ‘κΉ λ° νλ‘νμΌλ§ λΌμ΄λΈλ¬λ¦¬.
- Prometheus, Grafana: μΈνλΌ λ° μ ν리μΌμ΄μ μ λ©νΈλ¦μ μμ§νκ³ μκ°ννκΈ° μν νμ€ λꡬ.
- CI/CD:
- GitHub Actions, GitLab CI/CD, Azure DevOps, Jenkins: νμ΄μ¬ ML μν¬νλ‘μ°μ μ ν΅ν©λλ λ²μ© CI/CD νλ«νΌ.
- Argo Workflows, Tekton: MLμ CI/CDμ μ ν©ν Kubernetes λ€μ΄ν°λΈ μν¬νλ‘μ° μμ§.
κΈλ‘λ² MLOps λμ : κ³Όμ μ λͺ¨λ² μ¬λ‘
κΈλ‘λ² λ§₯λ½μμ MLOpsλ₯Ό ꡬννλ κ²μ μ μ€ν κ³ λ €κ° νμν λ νΉν κ³Όμ μ κΈ°νλ₯Ό μΌκΈ°ν©λλ€.
κΈλ‘λ² MLOpsμ κ³Όμ
- μΈμ¬ λΆμ‘± λ° κΈ°μ 격차: μ μΈκ³ λ°μ΄ν° κ³Όνμ λ° ML μμ§λμ΄ νμ μ±μ₯νκ³ μμ§λ§, μ λ¬Έ MLOps μ λ¬Έ μ§μμ νΉν μ ν₯ μμ₯μμ μ¬μ ν λΆμ‘±ν©λλ€. μ΄λ λ€μν μ§μμ κ±Έμ³ μ κ΅ν νμ΄νλΌμΈμ ꡬμΆνκ³ μ μ§νλ λ° μ΄λ €μμ μ΄λν μ μμ΅λλ€.
- κ·μ μ€μ λ° λ°μ΄ν° μ£ΌκΆ: λ€λ₯Έ κ΅κ° λ° κ²½μ λΈλ‘μ κ³ μ ν λ°μ΄ν° νλΌμ΄λ²μ λ²λ₯ (μ: EUμ GDPR, λ―Έκ΅μ CCPA, λΈλΌμ§μ LGPD, μ±κ°ν¬λ₯΄μ PDPA, λ¨μν리카μ POPIA, μΈλμ λ°μ΄ν° 보νΈλ², λ€μν μ§μ μν κ·μ )μ κ°μ§κ³ μμ΅λλ€. λ°μ΄ν° μ μ₯, μ²λ¦¬ λ° λͺ¨λΈ ν¬λͺ μ±μ λν μ΄λ¬ν λ€μν κ·μ μ μ€μνλ κ²μ κΈλ‘λ² λ°°ν¬μ μμ΄ λ³΅μ‘ν μμ μ΄ λ©λλ€. λ°μ΄ν° μ£ΌκΆμ νΉμ λ°μ΄ν°κ° νΉμ κ΅κ²½ λ΄μ λ¨μ μμ΄μΌ ν¨μ κ·μ ν μ μμ΅λλ€.
- μΈνλΌ μ ν λ° μ°κ²°μ±: κ³ μ μΈν°λ·, μ λ’°ν μ μλ ν΄λΌμ°λ μΈνλΌ λλ μ¨νλ λ―Έμ€ μ»΄ν¨ν 리μμ€μ λν μ κ·Όμ±μ μ§μμ λ°λΌ ν¬κ² λ€λ₯Ό μ μμ΅λλ€. μ΄λ λ°μ΄ν° μ μ‘ μλ, λͺ¨λΈ νλ ¨ μκ° λ° λ°°ν¬λ μλΉμ€μ μ λ’°μ±μ μν₯μ λ―ΈμΉ©λλ€.
- μ§μ κ° λΉμ© μ΅μ ν: μ¬λ¬ μ§μ(μ: AWS, Azure, GCP)μ λͺ¨λΈμ λ°°ν¬ν λ ν΄λΌμ°λ λΉμ©μ ν¨κ³Όμ μΌλ‘ κ΄λ¦¬νλ €λ©΄ μ μ€ν 리μμ€ νλ‘λΉμ λκ³Ό μ§μλ³ κ°κ²© μ°¨μ΄μ λν μ΄ν΄κ° νμν©λλ€.
- λ€μν μΈκ΅¬μ λν μ€λ¦¬μ AI λ° νΈν₯: ν μ§μμ λ°μ΄ν°λ‘ νλ ¨λ λͺ¨λΈμ λ¬Ένμ μ°¨μ΄, μ¬ν κ²½μ μ μμΈ λλ λ€μν λ°μ΄ν° λΆν¬λ‘ μΈν΄ λ€λ₯Έ μ§μμ λ°°ν¬λ λ μ±λ₯μ΄ μ νλκ±°λ νΈν₯μ λ³΄μΌ μ μμ΅λλ€. κΈλ‘λ² μ¬μ©μ κΈ°λ° μ λ°μ κ±Έμ³ κ³΅μ μ±κ³Ό λνμ±μ 보μ₯νλ κ²μ μ€μν μ€λ¦¬μ , κΈ°μ μ κ³Όμ μ λλ€.
- μκ°λ λ° λ¬Ένμ μ°¨μ΄: μ¬λ¬ μκ°λμ λΆμ°λ MLOps νμ μ‘°μ νλ κ²μ μμ¬μν΅, μ¬κ³ λμ λ° λκΈ°νλ λ°°ν¬λ₯Ό 볡μ‘νκ² λ§λ€ μ μμ΅λλ€. λ¬Ένμ λμμ€ λν νμ λ° μμ¬μν΅ μ€νμΌμ μν₯μ λ―ΈμΉ μ μμ΅λλ€.
κΈλ‘λ² MLOps ꡬνμ μν λͺ¨λ² μ¬λ‘
- νμ€νλ MLOps λꡬ λ° νλ‘μΈμ€: λͺ¨λ κΈλ‘λ² νμ κ±Έμ³ κ³΅ν΅λ λꡬ μΈνΈ(μ: μΆμ μ μν MLflow, 컨ν μ΄λνλ₯Ό μν Docker, μ€μΌμ€νΈλ μ΄μ μ μν Kubernetes)μ νμ€νλ μν¬νλ‘μ°λ₯Ό ꡬμΆν©λλ€. μ΄λ λ§μ°°μ μ΅μννκ³ μ§μ μ΄μ μ μ©μ΄νκ² ν©λλ€.
- ν΄λΌμ°λ λ 립μ λλ λ©ν° ν΄λΌμ°λ μ λ΅: κ°λ₯ν κ²½μ°, νμ΄νλΌμΈμ ν΄λΌμ°λ λ 립μ μΌλ‘ μ€κ³νκ±°λ λ©ν° ν΄λΌμ°λ λ°°ν¬λ₯Ό μ§μνλλ‘ μ€κ³ν©λλ€. μ΄λ λ°μ΄ν° κ±°μ£Ό μꡬ μ¬νμ μΆ©μ‘±νκ³ νΉμ μ§μμμ λΉμ© λλ μ±λ₯μ μ΅μ νν μ μλ μ μ°μ±μ μ 곡ν©λλ€. 컨ν μ΄λν(Docker)μ Kubernetesλ₯Ό μ¬μ©νλ©΄ μ΄λ₯Ό ν¬κ² λμΈ μ μμ΅λλ€.
- κ²¬κ³ ν λ¬Έμν λ° μ§μ 곡μ : μ½λ, λ°μ΄ν° μ€ν€λ§, λͺ¨λΈ μΉ΄λ, μ΄μ λ°λΆμ ν¬ν¨νμ¬ νμ΄νλΌμΈμ λͺ¨λ λ¨κ³μ λν ν¬κ΄μ μΈ λ¬Έμλ₯Ό μμ±ν©λλ€. μ μΈκ³μ λΆμ°λ νμ μ§μνκΈ° μν΄ κ°λ ₯ν μ§μ 곡μ κ΄ν(μ: λ΄λΆ μν€, μ κΈ° μν¬μ)μ ꡬνν©λλ€.
- λͺ¨λμ λ° κ΅¬μ± κ°λ₯ν νμ΄νλΌμΈ μ€κ³: μ 체 νμ΄νλΌμΈμ μ¬κ΅¬μΆνμ§ μκ³ λ λ‘컬 λ°μ΄ν° μμ€, κ·μ μ€μ μꡬ μ¬ν λλ λͺ¨λΈ λ³νμ μ μν μ μλλ‘ μ½κ² ꡬμ±νκ±°λ κ΅μ²΄ν μ μλ λͺ¨λμ κ΅¬μ± μμλ‘ νμ΄νλΌμΈμ μ€κ³ν©λλ€.
- νμ§νλ λ°μ΄ν° κ±°λ²λμ€ λ° μ΅λͺ ν: νμ§ κ·μ μ μ μν μ μλ λ°μ΄ν° κ±°λ²λμ€ μ λ΅μ ꡬνν©λλ€. μ¬κΈ°μλ μ°¨λΆ νλΌμ΄λ²μ κΈ°μ , ν©μ± λ°μ΄ν° μμ± λλ κΈλ‘λ² μ§κ³ μ λ‘컬 λ°μ΄ν° μ΅λͺ ν κ³μΈ΅μ΄ ν¬ν¨λ μ μμ΅λλ€.
- μ μ μ μΈ νΈν₯ νμ§ λ° μν: μ€ν λ¨κ³λΆν° νμ΄νλΌμΈμ 곡μ μ± λ° ν΄μ κ°λ₯μ± λꡬ(μ: SHAP, LIME, AI Fairness 360)λ₯Ό ν΅ν©ν©λλ€. 곡νν κ²°κ³Όλ₯Ό 보μ₯νκΈ° μν΄ νλ‘λμ μμ λ€μν μΈκ΅¬ ν΅κ³ λ° μ§λ¦¬μ μΈκ·Έλ¨ΌνΈμ κ±Έμ³ νΈν₯μ μ§μμ μΌλ‘ λͺ¨λν°λ§ν©λλ€.
- μ§μλ³ λμ보λλ₯Ό κ°μΆ μ€μ μ§μ€μ λͺ¨λν°λ§: κΈλ‘λ² κ°μλ₯Ό μ 곡νλ©΄μ νμ§ νμ΄ μ΄μκ³Ό κ΄λ ¨λ μ±λ₯, λ리ννΈ λ° κ²½κ³ λ₯Ό μΆμ ν μ μλ μΈλΆνλ μ§μλ³ λμ보λλ₯Ό μ 곡νλ μ€μ μ§μ€μ MLOps λͺ¨λν°λ§ μμ€ν μ ꡬμΆν©λλ€.
- λΉλκΈ° ν΅μ λ° νμ λꡬ: λΉλκΈ° ν΅μ μ μ§μνλ νμ νλ«νΌ(μ: Slack, Microsoft Teams, Jira)μ νμ©νμ¬ μκ°λ μ°¨μ΄μ μν₯μ μ€μ λλ€. μ¬λ¬ μ§μμ κ³ λ €ν μκ°μ μ£Όμ νμλ₯Ό μμ½ν©λλ€.
- μλνλ μ¬νλ ¨ λ° λ°°ν¬ μ λ΅: μ±λ₯ μ ν λλ 컨μ λ리ννΈμ μν΄ νΈλ¦¬κ±°λλ μλ λͺ¨λΈ μ¬νλ ¨μ ꡬνν©λλ€. λΈλ£¨/κ·Έλ¦° λ°°ν¬ λλ μΉ΄λ리 릴리μ€λ₯Ό νμ©νμ¬ μλ‘μ΄ λͺ¨λΈ λ²μ μ μ μΈκ³μ μΌλ‘ μμ νκ² μΆμνμ¬ μ€λ¨μ μ΅μνν©λλ€.
νμ΄μ¬ ML νμ΄νλΌμΈ λ° MLOpsμ λ―Έλ λν₯
MLOps νκ²½μ μλμ μ΄λ©°, μ§μμ μΈ νμ μ΄ κ·Έ λ―Έλλ₯Ό νμ±νκ³ μμ΅λλ€:
- μ± μκ° μλ AI(AI μ€λ¦¬, 곡μ μ±, ν¬λͺ μ±, νλΌμ΄λ²μ): 곡μ νκ³ , μ± μκ° μκ³ , ν¬λͺ νλ©°, νλΌμ΄λ²μλ₯Ό μ‘΄μ€νλ AI μμ€ν μ ꡬμΆ, λ°°ν¬ λ° λͺ¨λν°λ§νλ λ° λν κ°μ‘°κ° 컀μ§κ³ μμ΅λλ€. MLOps νμ΄νλΌμΈμ νΈν₯ νμ§, μ€λͺ κ°λ₯μ±, νλΌμ΄λ²μ 보쑴 ML(μ: μ°ν© νμ΅)μ μν λꡬλ₯Ό μ μ λ λ§μ΄ ν΅ν©ν κ²μ λλ€.
- λ‘μ°μ½λ/λ Έμ½λ MLOps νλ«νΌ: λ°μ΄ν° κ³Όνμλ€μ΄ λͺ¨λΈ κ°λ°μ λ μ§μ€ν μ μλλ‘ κΈ°λ³Έ μΈνλΌ λ³΅μ‘μ±μ λ§μ λΆλΆμ μΆμννλ νλ«νΌμ λλ€. μ΄λ MLOpsλ₯Ό λ―Όμ£Όννκ³ λ°°ν¬λ₯Ό κ°μνν©λλ€.
- μλνλ λ¨Έμ λ¬λ(AutoML) ν΅ν©: λͺ¨λΈ μ ν, νΌμ² μμ§λμ΄λ§, νμ΄νΌνλΌλ―Έν° νλμ μλννκΈ° μν΄ MLOps νμ΄νλΌμΈ λ΄μ AutoML κΈ°λ₯μ μννκ² ν΅ν©νμ¬ λ λΉ λ₯Έ λͺ¨λΈ κ°λ° λ° λ°°ν¬λ₯Ό μ΄λμ΄λ λλ€.
- μλ²λ¦¬μ€ MLOps: λ€μν νμ΄νλΌμΈ λ¨κ³(μ: μΆλ‘ , λ°μ΄ν° μ²λ¦¬)μ μλ²λ¦¬μ€ μ»΄ν¨ν (μ: AWS Lambda, Azure Functions, Google Cloud Functions)μ νμ©νμ¬ μ΄μ μ€λ²ν€λλ₯Ό μ€μ΄κ³ νΉν κ°νμ μΈ μν¬λ‘λμ λν΄ μλμΌλ‘ νμ₯ν©λλ€.
- νλ‘λμ μμμ κ°ν νμ΅(RL): RLμ΄ μ±μν¨μ λ°λΌ MLOpsλ νλ‘λμ νκ²½μμ μ§μμ μΌλ‘ νμ΅νλ RL μμ΄μ νΈλ₯Ό λ°°ν¬νκ³ λͺ¨λν°λ§νλ λ νΉν κ³Όμ λ₯Ό κ΄λ¦¬νλλ‘ μ μν κ²μ λλ€.
- μ£μ§ AI MLOps: μ»΄ν¨ν νμ, λ©λͺ¨λ¦¬, λ€νΈμν¬ μ°κ²°μ±κ³Ό κ°μ μ μ½ μ‘°κ±΄μ κ³ λ €νμ¬ μ£μ§ μ₯μΉμ λͺ¨λΈμ λ°°ν¬νκ³ κ΄λ¦¬νκΈ° μν μ μ© MLOps κ΄νμ λλ€. μ΄λ μ λ¬Ένλ λͺ¨λΈ μ΅μ ν λ° μ격 κ΄λ¦¬ κΈ°λ₯μ ν¬ν¨ν©λλ€.
- MLSecOps: 보μ λ°μ΄ν° μ²λ¦¬ λ° λͺ¨λΈ 무결μ±μμλΆν° κ²¬κ³ ν μ κ·Ό μ μ΄ λ° μ·¨μ½μ± κ΄λ¦¬μ μ΄λ₯΄κΈ°κΉμ§ MLOps λΌμ΄νμ¬μ΄ν΄ μ λ°μ κ±Έμ³ λ³΄μ λͺ¨λ² μ¬λ‘λ₯Ό ν΅ν©ν©λλ€.
κ²°λ‘
νμ΄μ¬μ νλΆν μνκ³λ μλ§μ μ‘°μ§μ΄ λ¨Έμ λ¬λμΌλ‘ νμ ν μ μλλ‘ νμ μ€μ΄μ£Όμμ΅λλ€. κ·Έλ¬λ μ΄λ¬ν νμ μ μ μ¬λ ₯μ κΈλ‘λ² κ·λͺ¨λ‘ μμ ν μ€ννλ €λ©΄ ν¨κ³Όμ μΈ λͺ¨λΈ κ΅¬μΆ μ΄μμ κ²μ΄ νμν©λλ€. μ΄μμ λν κ²¬κ³ νκ³ μμΉμ μΈ μ κ·Ό λ°©μμ΄ μꡬλ©λλ€.
νμ΄μ¬ ML νμ΄νλΌμΈ λ΄μμ MLOps μμΉμ ꡬννλ©΄ μ€νμ μΈ νλ‘μ νΈκ° μ¬ν κ°λ₯νκ³ νμ₯ κ°λ₯νλ©° μ§μμ μΌλ‘ μ΅μ νλλ νλ‘λμ μ€λΉ μμ€ν μΌλ‘ λ³νλ©λλ€. μλν, λ²μ κ΄λ¦¬, μ§μμ ν΅ν©/μ λ¬/νλ ¨, ν¬κ΄μ μΈ λͺ¨λν°λ§ λ° μ μ€ν λ°°ν¬ μ λ΅μ μμ©ν¨μΌλ‘μ¨ μ‘°μ§μ κΈλ‘λ² λ°°ν¬, κ·μ μꡬ μ¬ν λ° λ€μν μ¬μ©μ μꡬμ 볡μ‘μ±μ ν€μ³λκ° μ μμ΅λλ€.
μ±μν MLOpsλ‘μ μ¬μ μ κ³μλμ§λ§, κ·Έ ν¬μλ ν¨μ¨μ±, μ λ’°μ± λ° λ¨Έμ λ¬λμμ νμλλ μ§μμ μΈ λΉμ¦λμ€ κ°μΉ μΈ‘λ©΄μμ μλΉν μμ΅μ κ°μ Έλ€μ€λλ€. MLOpsλ₯Ό λ°μλ€μ΄κ³ , νμ΄μ¬ ML μ΄λμ ν°λΈμ μ§μ ν κΈλ‘λ² νμλ₯Ό λ°ννμμμ€.